package com.itany.corejava.code12_线程;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年07月30日16:21
 */
public class Test10_wait {
    public static void main(String[] args) {
        Object o=new Object();
        MyT1 t1=new MyT1(o);
        MyT2 t2=new MyT2(o);
        t1.setPriority(10);
        t2.setPriority(1);

        //启动线程
        t1.start();
        t2.start();


    }

}
class MyT1 extends Thread{
    private Object o;
    public MyT1(Object o){
        this.o=o;
    }

    @Override
    public void run() {
        System.out.println("---------T1线程开始运行了---------");
        synchronized (o){
            try {
                //使得线程放弃对象锁，进入到等待池
                o.wait();//如果不传递参数，则表示无法自动唤醒
                // o.wait(1000);//如果传递参数，则表示参数在指定毫秒之后自动唤醒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("-----------T1线程继续运行------------");
        }
    }
}
class MyT2 extends  Thread{
    private Object o;

    public MyT2( Object o) {
        this.o = o;
    }

    @Override
    public void run() {
        System.out.println("-----------T2线程开始运行了----------");
        synchronized (o){//等待和唤醒必须使用的是同一个对象
            // o.notify();//随机唤醒等待池中的某一个线程，使得对应线程进入锁池
            o.notifyAll();//唤醒方法调用者的对象的等待池中所有的线程
        }
    }
}